home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 23
/
Aminet 23 (1998)(GTI - Schatztruhe)[!][Feb 1998].iso
/
Aminet
/
disk
/
misc
/
TransADF.lha
/
Source
/
write_disk.c
< prev
next >
Wrap
C/C++ Source or Header
|
1997-12-08
|
3KB
|
98 lines
#include <exec/types.h>
#include <exec/memory.h>
#include <dos/dos.h>
#include <clib/exec_protos.h>
#include <clib/dos_protos.h>
#include "write_disk.h"
#include "main.h"
#include "td.h"
#include "util.h"
#include "errors.h"
#define WD_TBTRACKS 1 /* Tracks in wd_TrackBuf */
#define WD_TBSIZE (WD_TBTRACKS * TRACK_SIZE) /* Bytes in wd_TrackBuf */
UBYTE *wd_TrackBuf; /* Our input buffer - reads from file. */
/*
** Writes a file into a disk.
** Expects all fields of adfPkt to be set.
*/
void writeDisk (struct ADF_Packet *adfPkt)
{
BYTE TDError;
LONG DOSError, RWSize;
int i;
/* Output info header */
FPrintf (StdErr, "Writing from %s to TrackDisk Unit %ld (DF%ld:).\n",
adfPkt->ADFileName,
adfPkt->diskUnit,
adfPkt->diskUnit);
FPrintf (StdErr, "Starting at track %ld, Ending at track %ld.\n",
(adfPkt->startTrack>>1),
(adfPkt->endTrack>>1));
/* Allocate track buffer */
wd_TrackBuf = (UBYTE *) AllocVec (WD_TBSIZE, MEMF_CLEAR);
if (!wd_TrackBuf)
{
/* Out of memory! */
FPrintf (StdErr, "%s: Out of memory.\n", ProgName);
cleanExit (RETURN_FAIL, ERROR_NO_FREE_STORE);
}
/* Start writing */
for (i = adfPkt->startTrack; i <= adfPkt->endTrack; i++)
{
/* Check for Control-C break */
if (CTRL_C)
{
FPutC (StdOut, '\n');
FPrintf (StdErr, "%s - %s\n", breakText, ProgName);
cleanExit (RETURN_WARN, NULL);
}
/* Fill the buffer from file */
RWSize = Read (adfPkt->ADFile, wd_TrackBuf, WD_TBSIZE);
if (RWSize != WD_TBSIZE)
{
DOSError = IoErr();
FPutC (StdOut, '\n');
FPrintf (StdErr, "%s: Error reading from %s - ", ProgName,
adfPkt->ADFileName);
if (DOSError)
reportDOSError (DOSError);
else
FPuts (StdErr, "File to short.\n");
cleanExit (RETURN_ERROR, DOSError);
}
/* Update progress information */
FPuts (StdOut, "\rWriting ");
FPUTS_TS (i, StdOut);
Flush (StdOut);
/* Write the buffer to the disk */
TDError = writeTrack (wd_TrackBuf, WD_TBTRACKS, i, adfPkt->diskReq);
if (TDError)
{
FPutC (StdOut, '\n');
FPrintf (StdErr, "%s: Error writing to DF%ld: - ",ProgName,
adfPkt->diskUnit);
reportTDError (TDError);
cleanExit (RETURN_ERROR, NULL);
}
}
/* Free buffer */
FreeVec (wd_TrackBuf); wd_TrackBuf = NULL;
}